package com.softWang.common.base;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@Data
public class LoginUser {

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户类型，(1.超级管理员，2.创建的普通管理员,3.租户管理员)
     */
    private Integer type;

    /**
     * 用户名
     */
    private String userName;
    /**
     * 登录账号
     */
    private String loginName;

    /**
     * 部门ID
     */
    private Long deptId;

    private String userIp;

    /**
     * 权限标识列表
     */
    private Set<String> permissions = new HashSet<>();

    /**
     * 角色标识列表
     */
    private Set<String> roleCodes = new HashSet<>();
    /**
     * 存放各客户端的token信息，以便控制不同客户端的登录次数和清除同一个客户端的不同登录信息，确保一个客户端只能登录一次
     */
    // key  clientType, vlaue 是map 里面key是accesstoken,和refreshToken，值是对应的token值
    private Map<Integer, Map<String,String>> clientInfos;

    /**
     * 租户id
     */
    private Long tenantId;

    /**
     * 上下文字段，不进行持久化.用于基于 LoginUser 维度的临时缓存
     */
    private Map<String, Object> context;


    public void setContext(String key, Object value) {
        if (context == null) {
            context = new HashMap<>();
        }
        context.put(key, value);
    }

    public <T> T getContext(String key, Class<T> type) {
        return context == null? null : (T) context.get(key);
    }

}
